<?php

Class MY_Config extends CI_Config {

    
    function __construct() {
        
        parent::CI_Config();
        
        //Создание глобального хранилища
        $this->config['core_main'] = array();
        
        //Инициализация кэширования
        require_once APPPATH.'libraries/Cache.php';
        new Cache('File', 0, APPPATH.'cache/');
        
        $this->config['core_main'] = Cache::get('core', 'main', true);
        
        if ($this->get('cache', 'core') != 1) {
            
            Cache::disable();
        }
    }
    
    
    /**
     * Добавление данных в глобальное хранилище
     * @param string $name Имя секции
     * @param mixed $value Данные для добавление
     * @return void
     */
    public function set_core($name, $value) {
        
        if (isset($this->config['core_main'][$name]) && is_array($value)) {
            
            $this->config['core_main'][$name] = array_merge($this->config['core_main'][$name], $value);
        }
        else {
        
            $this->config['core_main'][$name] = $value;
        }
    }
    
    
    /**
     * Загружаем главные настройки
     * @param object $db CI_DB
     */
    public function load_settings($db, $reload = false) {
        
        if ($this->item('settings', 'core_main') !== false && !$reload) {
            
            return;
        }
        
        $query = $db->get('settings');
        
        foreach ($query->result_array() as $row) {
            
            $array[$row['modul']][$row['name']] = $row['value'];
        }
        
        $this->set_core('settings', $array);
    }
    
    
    /**
     * Получение настроек сайта
     * @param string $name Имя опции
     * @param string $modul Модуль
     * @return mixed|mixed
     */
    public function get($name, $modul = false) {
        
        if ($modul) {
            
            return (isset($this->config['core_main']['settings'][$modul][$name])) ? $this->config['core_main']['settings'][$modul][$name] : false;
        }
        
        return (isset($this->config['core_main']['settings'][$name])) ? $this->config['core_main']['settings'][$name] : false;
    }
    
    
    /**
     * Сохраняем глобальный конфиг в кэш, если его не существует
     */
    public function  save_settings() {
        
        if ($this->get('cache', 'core') != 1) {
            
            Cache::disable();
            Cache::clear('core', 'main');
        }
        else {
            
            Cache::enable();
        }
        
        Cache::set('core', 'main', $this->config['core_main']);
        return true;
    }
}